package com.pomr.controller.test;

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URI;  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;  
import java.util.List;  
import java.util.Map;
import java.util.Map.Entry;

import com.pomr.entity.EquipmentApc;
import com.pomr.entity.PersonMsg;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;  
import org.apache.http.HttpStatus;  
import org.apache.http.NameValuePair;  
import org.apache.http.StatusLine;  
import org.apache.http.client.HttpClient;  
import org.apache.http.client.entity.UrlEncodedFormEntity;  
import org.apache.http.client.methods.CloseableHttpResponse;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.entity.StringEntity;  
import org.apache.http.impl.client.CloseableHttpClient;  
import org.apache.http.impl.client.DefaultHttpClient;  
import org.apache.http.impl.client.HttpClients;  
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;  
import org.apache.http.util.EntityUtils;  
import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSONObject; 

public class HttpUtil {
	/** 
     * get请求 
     * @return 
     */  
    public static String doGet(String url) {  
        try {  
            HttpClient client = new DefaultHttpClient();  
            //发送get请求  
            HttpGet request = new HttpGet(url);  
            HttpResponse response = client.execute(request);  
   
            /**请求发送成功，并得到响应**/  
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
                /**读取服务器返回过来的json字符串数据**/  
                String strResult = EntityUtils.toString(response.getEntity());  
                  
                return strResult;  
            }  
        }   
        catch (IOException e) {  
            e.printStackTrace();  
        }  
          
        return null;  
    }  
      
    /** 
     * post请求(用于key-value格式的参数) 
     * @param url 
     * @param params 
     * @return 
     */  
    public static String doPost(String url, Map params){  
          
        BufferedReader in = null;    
        try {    
            // 定义HttpClient    
            HttpClient client = new DefaultHttpClient();    
            // 实例化HTTP方法    
            HttpPost request = new HttpPost();    
            request.setURI(new URI(url));  
              
            //设置参数  
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();   
            for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {  
                String name = (String) iter.next();  
                String value = String.valueOf(params.get(name));
                System.out.println("value---"+value);
                nvps.add(new BasicNameValuePair(name, value));  
            }  
            request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));  
              
            HttpResponse response = client.execute(request);    
            int code = response.getStatusLine().getStatusCode();  
            if(code == 200){    //请求成功  
                in = new BufferedReader(new InputStreamReader(response.getEntity()    
                        .getContent(),"utf-8"));  
                StringBuffer sb = new StringBuffer("");    
                String line = "";    
                String NL = System.getProperty("line.separator");    
                while ((line = in.readLine()) != null) {    
                    sb.append(line + NL);    
                }  
                  
                in.close();    
                  
                return sb.toString();  
            }  
            else{   //  
                System.out.println("状态码：" + code);  
                return null;  
            }  
        }  
        catch(Exception e){  
            e.printStackTrace();  
              
            return null;  
        }  
    }  
      
    /** 
     * post请求（用于请求json格式的参数） 
     * @param url 
     * @param params 
     * @return 
     */  
    public static String doPost(String url, String params) throws Exception {  
          
        CloseableHttpClient httpclient = HttpClients.createDefault();  
        HttpPost httpPost = new HttpPost(url);// 创建httpPost     
        httpPost.setHeader("Accept", "application/json");   
        httpPost.setHeader("Content-Type", "application/json");  
        String charSet = "UTF-8";  
        StringEntity entity = new StringEntity(params, charSet);
        httpPost.setEntity(entity);          
        CloseableHttpResponse response = null;  
          
        try {  
              
            response = httpclient.execute(httpPost);  
            StatusLine status = response.getStatusLine();  
            int state = status.getStatusCode();  
            if (state == HttpStatus.SC_OK) {  
                HttpEntity responseEntity = response.getEntity();  
                String jsonString = EntityUtils.toString(responseEntity);  
                return jsonString;  
            }  
            else{  
//                 logger.error("请求返回:"+state+"("+url+")");  
            }  
        }  
        finally {  
            if (response != null) {  
                try {  
                    response.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
            try {  
                httpclient.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        return null;  
    }  
    
    public static String rundll(Map<String, String> map) {
		String resq = null;
		HttpResponse response = null;
		try {
			//调用http接口 获取远图返回结果
			DefaultHttpClient httpClient = new DefaultHttpClient();
			httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 200000);//连接时间
			httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 200000);//数据传输时间
			//获取url
			String ip = "http://222.173.105.42:8092/data";
			System.out.println("请求地址："+ip);
			
			HttpPost httppost = new HttpPost(ip); 
			//设置传输格式 form
			httppost.addHeader(HTTP.CONTENT_TYPE, "application/json");
			//设置参数
			UrlEncodedFormEntity entity = getParams(map);
	        httppost.setEntity(entity);   
	        //请求表单
	        response = httpClient.execute(httppost);
	        
	        int stat = response.getStatusLine().getStatusCode();
	        if(stat >= 200 && stat < 300){
	        	resq = ""+EntityUtils.toString(response.getEntity());
	        }else{
	        	System.out.println("获取接口错误！链接状态："+response.getStatusLine().getStatusCode());
	        	throw new Exception("获取接口错误！状态码："+response.getStatusLine().getStatusCode());
	        }
			System.out.println("返回值："+resq);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("获取接口错误！");
		}
		
		return resq;
	}
    
    public static UrlEncodedFormEntity getParams(Map<String, String> params)throws Exception{
		//设置参数
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        for(Entry<String, String> entry:params.entrySet()){
        	System.out.println("getParams()方法中:key="+entry.getKey().toString()+";value="+entry.getValue().toString());
        	list.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString()));
        }
        
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "UTF-8");
        return entity;
	}
    
    public static void main(String[] args) {
		try {

			Map<String, Object> parammap = new HashMap<String, Object>();
			PersonMsg pmsg = new PersonMsg();
			pmsg.setName("王桂超");
			pmsg.setIdcard("370784199111166215");
			EquipmentApc apc = new EquipmentApc();
			apc.setPerson(pmsg);
			apc.setAgencyid("1");
			apc.setEuipmentid("1");
			parammap.put("data", JSONObject.toJSON(apc));
			String res = doPost("http://127.0.0.1:8080/POMR/receive/app-application.do", parammap);
			System.out.println(res);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
    
    public static String strTo16(String s) {
        String str = "";
        for (int i = 0; i < s.length(); i++) {
            int ch = (int) s.charAt(i);
            String s4 = Integer.toHexString(ch);
            str = str + s4;
        }
        return str;
    }
}
